package com.es.easystoragesimulatedata.service;

import com.es.easystoragesimulatedata.model.EnumInfo;
import com.es.easystoragesimulatedata.model.TimeType;
import com.es.easystoragesimulatedata.model.RankingDataType;
import com.es.easystoragesimulatedata.model.SortOrder;
import com.es.easystoragesimulatedata.model.StationStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 枚举信息服务类
 */
@Slf4j
@Service
public class EnumService {
    
    /**
     * 获取时间类型枚举信息
     */
    public List<EnumInfo> getTimeTypes() {
        List<EnumInfo> timeTypes = new ArrayList<>();
        for (TimeType timeType : TimeType.values()) {
            timeTypes.add(new EnumInfo(
                timeType.name(),
                timeType.getDescription(),
                getTimeTypeDescription(timeType)
            ));
        }
        return timeTypes;
    }
    
    /**
     * 获取排名数据类型枚举信息
     */
    public List<EnumInfo> getRankingDataTypes() {
        List<EnumInfo> rankingTypes = new ArrayList<>();
        for (RankingDataType dataType : RankingDataType.values()) {
            rankingTypes.add(new EnumInfo(
                dataType.name(),
                dataType.getDescription(),
                getRankingDataTypeDescription(dataType)
            ));
        }
        return rankingTypes;
    }
    
    /**
     * 获取排序类型枚举信息
     */
    public List<EnumInfo> getSortOrders() {
        List<EnumInfo> sortOrders = new ArrayList<>();
        for (SortOrder sortOrder : SortOrder.values()) {
            sortOrders.add(new EnumInfo(
                sortOrder.name(),
                sortOrder.getDescription(),
                getSortOrderDescription(sortOrder)
            ));
        }
        return sortOrders;
    }
    
    /**
     * 获取电站状态枚举信息
     */
    public List<EnumInfo> getStationStatuses() {
        List<EnumInfo> stationStatuses = new ArrayList<>();
        for (StationStatus status : StationStatus.values()) {
            stationStatuses.add(new EnumInfo(
                status.name(),
                status.getDescription(),
                getStationStatusDescription(status)
            ));
        }
        return stationStatuses;
    }
    
    /**
     * 获取所有枚举信息
     */
    public List<EnumInfo> getAllEnums() {
        List<EnumInfo> allEnums = new ArrayList<>();
        
        // 添加时间类型
        allEnums.addAll(getTimeTypes());
        
        // 添加排名数据类型
        allEnums.addAll(getRankingDataTypes());
        
        // 添加排序类型
        allEnums.addAll(getSortOrders());
        
        // 添加电站状态
        allEnums.addAll(getStationStatuses());
        
        return allEnums;
    }
    
    /**
     * 获取排序类型的详细描述
     */
    private String getSortOrderDescription(SortOrder sortOrder) {
        switch (sortOrder) {
            case ASC:
                return "按数值从小到大排序";
            case DESC:
                return "按数值从大到小排序";
            default:
                return "";
        }
    }
    
    /**
     * 获取排名数据类型的详细描述
     */
    private String getRankingDataTypeDescription(RankingDataType dataType) {
        switch (dataType) {
            case DISCHARGE_ENERGY:
                return "按储能放电量排名，单位：kWh";
            case SYSTEM_EFFICIENCY:
                return "按系统效率排名，单位：%";
            case CUMULATIVE_REVENUE:
                return "按储能累计收入排名，单位：元";
            default:
                return "";
        }
    }
    
    /**
     * 获取时间类型的详细描述
     */
    private String getTimeTypeDescription(TimeType timeType) {
        switch (timeType) {
            case DAY:
                return "按日查询数据，日期格式：yyyy-MM-dd";
            case MONTH:
                return "按月查询数据，日期格式：yyyy-MM";
            case YEAR:
                return "按年查询数据，日期格式：yyyy";
            default:
                return "";
        }
    }
    
    /**
     * 获取电站状态的详细描述
     */
    private String getStationStatusDescription(StationStatus status) {
        switch (status) {
            case CONSTRUCTION:
                return "电站正在建设或调试阶段，尚未正式投入运营";
            case GRID_CONNECTED:
                return "电站已接入电网，正在进行试运行或调试";
            case COMMERCIAL_OPERATION:
                return "电站正式商业化运营，正常产生收益";
            default:
                return "";
        }
    }
}
